// Copyright 2019 by 马万里. All rights reserved.
// 开发团队 ：   鸡中之霸
// 开发人员 ：   马万里
// 开发时间 ：   2019-02-23 21:24
// 文件名称 ：   note.go
// 工程名称 ：   beego_project
// 开发工具 ：   GoLand
//

package controllers

import (
	"beego_project/models"
	"beego_project/syserror"
	"bytes"
	"errors"
	"github.com/PuerkitoBio/goquery"
	"github.com/jinzhu/gorm"
)

type NoteController struct {
	BaseController
}

func (this *NoteController) NextPrepare() {
	this.MustLogin()
	if this.User.Role != 1 {
		this.Abort500(errors.New("权限不足！"))
	}
}

// @router /new [get]
func (this *NoteController) Index() {
	this.Data["key"] = this.UUID()
	this.TplName = "note_new.html"
}

// @router /save/:key [post]
func (this *NoteController) Save() {
	key := this.Ctx.Input.Param(":key")
	// title, content
	title := this.GetMustString("title", "请输入标题！")
	content := this.GetMustString("content", "请输入文章内容!")

	note, err := models.QueryNoteByKey(key)
	if err != nil {
		if err == gorm.ErrRecordNotFound {
			// 没找到，新增
			note = models.Note{
				Key:     key,
				Title:   title,
				Content: content,
				UserID:  int(this.User.ID),
				User:    this.User,
			}
		} else {
			this.Abort500(syserror.New("保存失败", err))
		}
	} else {
		// 找到了
		note.Title = title
		note.Content = content
	}

	// 摘要逻辑
	note.Summary, err = getSummary(content)

	if err = models.SaveNote(&note); err != nil {
		this.Abort500(syserror.New("保存失败", err))
	}

	this.JSONOKH("保存成功", H{})
}

// 获取摘要
func getSummary(html string) (string, error) {
	var bufBytes bytes.Buffer
	if _, err := bufBytes.WriteString(html); err != nil {
		return "", err
	}
	doc, err := goquery.NewDocumentFromReader(&bufBytes)
	if err != nil {
		return "", err
	}
	txtHtml := doc.Find("body").Text()
	if len(txtHtml) > 600 {
		txtHtml = txtHtml[:600]
	}
	return txtHtml, nil
}
